// Compare this snippet from createNameOrderServiceImpl.java:
package com.ruoyi.program.service.impl;

import com.ruoyi.program.service.ICreateNameOrderService;
import com.ruoyi.program.mapper.CreateNameOrderMapper;
import com.ruoyi.program.domain.CreateNameOrder;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Map;
import java.util.List;


// 导入日期

/**
 * 创建起名字订单Service业务层处理
 * 
 * @author 陈冲
 * @date 2025-04-21 15:20:00 创建起名字订单Service业务层处理
 */
@Service
// 由于 ICreateNameOrderService 无法解析，推测应实现已导入的 CreateNameOrderService 接口
public class CreateNameOrderServiceImpl implements ICreateNameOrderService {

  @Autowired
  private CreateNameOrderMapper createNameOrderMapper;
  // 1.1 生成订单号 订单号生成规则:《PPDZN+系统当前时间+两位随机数》
  // 1.2 生成订单状态 订单状态：1 未支付 2 已支付 3 已取消 4 已退款 5 已关闭
  // 1.3 生成订单标题 订单标题：《起名字》
  // 1.4 生成订单创建时间 订单创建时间：系统当前时间
  // 1.5 生成订单支付时间 订单支付时间：订单支付时生成
  // 生成订单号
  // java.util.Date now = new java.util.Date();
  // // 由于 format 未定义，这里创建一个 SimpleDateFormat 实例来格式化日期
  // SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  // String dateStr = format.format(now).replace(":", "").replace(" ", "");
  // int randomNum = (int) (Math.random() * 90) + 10; // 生成两位随机数
  // String orderNo = "PPDZN" + dateStr + randomNum;

  // // 生成订单状态 1 未支付 2 已支付 3 已取消 4 已退款 5 已关闭
  // int status = 1;
  // // 生成订单标题 订单标题：《起名字》
  // String subject = "起名字";
  // // 生成订单创建时间 订单创建时间：系统当前时间
  // Date createTime = new Date();
  // // 生成订单支付时间 订单支付时间：订单支付时生成
  // Date payTime = new Date();
  // // 生成订单关闭时间 订单关闭时间：订单关闭时生成
  // Date closeTime = new Date();
  // // 商品id默认为当前时间戳
  // int productId = (int) (System.currentTimeMillis() / 1000);
  // // 商品数量默认为1
  // int productNumber = 1;
  // // 商品价格默认为9.90
  // double productPrice = 9.90;
  // // 商品总价等于 商品数量*商品单价 取小数点后两位
  // double totalPrice = Math.round(productNumber * productPrice * 100) / 100.0;
  /**
   * 实现接口方法
   */
  @Override
  public int createNameOrderService(CreateNameOrder createNameOrder) {
    System.out.println("用户传入的字段" + createNameOrder.toString());
    System.out.println("createNameOrderService" + createNameOrder.toString());
    String surname = createNameOrder.getSurname(); // 获取用户传入的名字
    int sex = createNameOrder.getSex(); // 获取用户传入的性别
    int type = createNameOrder.getType(); // 获取用户传入的类型
    Date birthday = createNameOrder.getBirthday(); // 获取用户传入的生日
    String userId = createNameOrder.getUserId(); // 获取用户传入的userId
    String appid = createNameOrder.getAppid(); // 获取用户传入的appid
    String subject = createNameOrder.getSubject(); //生成订单标题 前端传入的
    String remarks = createNameOrder.getRemarks(); //生成订单备注 前端传入的
    String contact = createNameOrder.getContact(); // 获取用户传入的联系方式
    int productType = createNameOrder.getProductType(); // 获取用户传入的产品类型
    double productPrice = createNameOrder.getProductPrice(); // 获取用户传入的产品价格

    // 生成订单号
    java.util.Date now = new java.util.Date();
    // 由于 format 未定义，这里创建一个 SimpleDateFormat 实例来格式化日期
    SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmss");

    String dateStr = format.format(now).replace(":", "").replace(" ", "");
    int randomNum = (int) (Math.random() * 90) + 10; // 生成两位随机数
    String orderNo = "QM" + dateStr + randomNum;

    // 生成订单状态 1 未支付 2 已支付 3 已取消 4 已退款 5 已关闭
    int status = 1;
    // 生成订单标题 订单标题：《起名字》
    // String subject = "起名字";
    // 生成订单创建时间 订单创建时间：系统当前时间
    Date createTime = new Date();
    // 生成订单支付时间 订单支付时间：订单支付时生成
    Date payTime = null;
    // 生成订单关闭时间 订单关闭时间：订单关闭时生成
    Date closeTime = null;
    // 商品id默认为当前时间戳
    int productId = (int) (System.currentTimeMillis() / 1000);
    // 商品数量默认为1
    int productNumber = 1;
    // 商品价格默认为9.90
    // double productPrice = 19.9;
    // 商品原价
    double productOriginalPrice = 99.99;
    // 商品总价等于 商品数量*商品单价 取小数点后两位
    double totalPrice = Math.round(productNumber * productPrice * 100) / 100.0;

    // 创建 createNameOrder 对象并设置属性
    // 由于 createNameOrder 变量已存在，这里无需重复声明，直接使用即可，所以注释掉重复声明代码
    // createNameOrder createNameOrder = new createNameOrder();
    createNameOrder.setSurname(surname);
    createNameOrder.setSex(sex);
    createNameOrder.setType(type);
    createNameOrder.setBirthday(birthday);
    createNameOrder.setUserId(userId);
    createNameOrder.setAppid(appid);
    createNameOrder.setProductId(productId);
    createNameOrder.setProductPrice(productPrice);
    createNameOrder.setProductNumber(productNumber);
    createNameOrder.setTotalPrice(totalPrice);
    createNameOrder.setSubject(subject);
    createNameOrder.setStatus(status);
    createNameOrder.setOrderNo(orderNo);
    createNameOrder.setCreateTime(createTime);
    createNameOrder.setPayTime(payTime);
    createNameOrder.setCloseTime(closeTime);
    createNameOrder.setProductOriginalPrice(productOriginalPrice);
    // 由于 refundTime 未定义，这里暂时将退款时间设为 null，表示未退款
    createNameOrder.setRefundTime(null);
    createNameOrder.setRemarks(remarks); // 生成订单备注
    createNameOrder.setContact(contact); // 生成订单联系方式
    createNameOrder.setProductType(productType); // 生成订单产品类型
    createNameOrder.setProductPrice(productPrice); // 生成订单产品价格


    return createNameOrderMapper.createNameOrder(createNameOrder);

    // 可以在这里将 appid 用于订单相关逻辑，例如设置到 createNameOrder 对象中
    // 如果前面没有设置 appid，这里可以再次确认

    // 生成订单号
    // java.util.Date now = new java.util.Date();
    // SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    // String dateStr = format.format(now).replace(":", "").replace(" ", "");
    // int randomNum = (int) (Math.random() * 90) + 10; // 生成两位随机数
    // String orderNo = "PPDZN" + dateStr + randomNum;

    // 设置订单相关信息到 createNameOrder 对象

    // createNameOrder.setAppid(appid);
    // createNameOrder.setOrderNo(orderNo);
    // createNameOrder.setStatus(1);
    // createNameOrder.setSubject("起名字");
    // createNameOrder.setCreateTime(now);
    // // 订单支付时间和关闭时间在订单支付和关闭时设置，这里暂不处理
    // createNameOrder.setProductId((int) (System.currentTimeMillis() / 1000));
    // createNameOrder.setProductNumber(1);
    // createNameOrder.setProductPrice(9.90);
    // createNameOrder.setTotalPrice(Math.round(1 * 9.90 * 100) / 100.0);

  }

  /**
   * 更新订单状态
   * 
   * @param status     订单状态
   * @param outTradeNo 订单号
   */
  public int updateNameOrderService(Integer status, String outTradeNo ,Date payTime) {
    return createNameOrderMapper.updateNameOrderService(status, outTradeNo, payTime);
  }

  /**
   * 查询订单
   * 
   * @param tradeNO 订单号
   * @return 订单信息
   */

  public CreateNameOrder selectNameOrderService(String tradeNO) {
    return createNameOrderMapper.selectNameOrderService(tradeNO);
  }

  /**
   * 更新支付宝交易号
   */
  public int updateAlipayTradeNoService(String tradeNo, String orderNo) {
    return createNameOrderMapper.updateAlipayTradeNoService(tradeNo, orderNo);
  }

  @Override
  public void insertNamesByOrderNo(Map<String, Object> insertParams) {
    createNameOrderMapper.insertNamesByOrderNo(insertParams);
  }

  // 根据小程序用户查询订单列表
  @Override
  // 根据接口定义，修改返回类型为 Map<String, Object>
  public List<CreateNameOrder> selectUserOrderListService(String userId,Integer status) {
    return createNameOrderMapper.selectUserOrderListService(userId,status);
  }

  @Override
  public CreateNameOrder selectNameDetailsByOrderNo(String orderNo) {
    return createNameOrderMapper.selectNameDetailsByOrderNo(orderNo);
  }

  @Override
  public String querySurname(String surname) {
    return createNameOrderMapper.querySurname(surname);
  }

}
